{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "data = np.random.randn(2,3)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.56304154,  0.92090145,  0.42702567],\n",
       "       [-1.20916491, -0.32299777,  0.07658498]])"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 15.63041537,   9.2090145 ,   4.27025674],\n",
       "       [-12.09164913,  -3.22997765,   0.76584984]])"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data*10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 3.12608307,  1.8418029 ,  0.85405135],\n",
       "       [-2.41832983, -0.64599553,  0.15316997]])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data+data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 4.68912461,  2.76270435,  1.28107702],\n",
       "       [-3.62749474, -0.9689933 ,  0.22975495]])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data+data*2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('float64')"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.dtype   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([6. , 7.5, 9. , 0. , 1. ])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data1 = [6,7.5,9,0,1]\n",
    "arr1 = np.array(data1)\n",
    "arr1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3, 4],\n",
       "       [5, 6, 7, 8]])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data2 = [[1,2,3,4],[5,6,7,8]]\n",
    "arr2 = np.array(data2)\n",
    "arr2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2.ndim  #这个属性相当于 矩征的秩"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2, 4)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2.shape #两行三列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.zeros(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0., 0., 0., 0., 0., 0.],\n",
       "       [0., 0., 0., 0., 0., 0.],\n",
       "       [0., 0., 0., 0., 0., 0.]])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.zeros((3,6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[0., 0.],\n",
       "        [0., 0.],\n",
       "        [0., 0.]],\n",
       "\n",
       "       [[0., 0.],\n",
       "        [0., 0.],\n",
       "        [0., 0.]]])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.empty((2,3,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.arange(15)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "arr = np.array([[1.,2.,3.],[4.,5.,6.]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1., 2., 3.],\n",
       "       [4., 5., 6.]])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.,  4.,  9.],\n",
       "       [16., 25., 36.]])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr*arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0., 0., 0.],\n",
       "       [0., 0., 0.]])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr - arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1.        , 0.5       , 0.33333333],\n",
       "       [0.25      , 0.2       , 0.16666667]])"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "1/arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1.        , 1.41421356, 1.73205081],\n",
       "       [2.        , 2.23606798, 2.44948974]])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr ** 0.5  #开平方"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[False,  True, False],\n",
       "       [ True, False,  True]])"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2 = np.array([[0,4,1],[7,2,12]])\n",
    "arr2>arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([7, 8, 9])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2d[2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2d[0][2] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2d[0,2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6],\n",
       "       [7, 8, 9]])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3])"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2d[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "old_values = arr2d.copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6],\n",
       "       [7, 8, 9]])"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "old_values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "names = np.array(['bob','joe','will','bob','will','joe','joe'])\n",
    "data = np.random.randn(7,4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-1.03436867, -1.49644528,  0.10733672, -0.51864676],\n",
       "       [ 2.2383288 , -1.24033807, -0.24154884,  1.34584077],\n",
       "       [ 0.4971102 , -0.23848232,  1.05887015, -0.27956553],\n",
       "       [ 2.39795216, -1.53778249,  2.09622997,  0.68574536],\n",
       "       [ 0.32307123, -0.95178882, -0.45109304,  0.97458197],\n",
       "       [ 0.85075703,  0.72561621,  0.93180134, -0.60634868],\n",
       "       [-1.37647529, -0.38299047, -1.8810669 , -0.76905804]])"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['bob', 'joe', 'will', 'bob', 'will', 'joe', 'joe'], dtype='<U4')"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "names"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True, False, False,  True, False, False, False])"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "names == 'bob'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "names[0] =='bob'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.325019  ,  0.60079225,  0.33246137, -0.05651673],\n",
       "       [-0.16318686,  0.47927302, -1.02908707, -0.05118552]])"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[names=='bob']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([], shape=(0, 7, 4), dtype=float64)"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[True,True,False,False,False,False,True]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.33246137, -0.05651673],\n",
       "       [-1.02908707, -0.05118552]])"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[names == 'bob',2:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.94179963,  0.88746575,  0.00493292,  0.0761903 ],\n",
       "       [-0.62158598, -1.04351803,  0.18175287,  0.30331829],\n",
       "       [ 1.33339705, -1.41004313,  1.86623755, -0.6543663 ],\n",
       "       [-0.69445657,  0.72322002,  0.52421942,  1.4766462 ],\n",
       "       [-0.2211204 ,  0.08884123,  1.34619969,  1.87255671]])"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[~(names == 'bob')]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.325019  ,  0.60079225,  0.33246137, -0.05651673],\n",
       "       [-0.62158598, -1.04351803,  0.18175287,  0.30331829],\n",
       "       [-0.16318686,  0.47927302, -1.02908707, -0.05118552],\n",
       "       [ 1.33339705, -1.41004313,  1.86623755, -0.6543663 ]])"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mask = (names == 'bob')|(names == 'will')\n",
    "data[mask]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "data[data<0]=0 \n",
    "data[names != 'joe'] = 4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,\n",
       "       17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr = np.arange(32).reshape((8,4)) \n",
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "arr = np.arange(15).reshape((3,5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2,  3,  4],\n",
       "       [ 5,  6,  7,  8,  9],\n",
       "       [10, 11, 12, 13, 14]])"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  5, 10],\n",
       "       [ 1,  6, 11],\n",
       "       [ 2,  7, 12],\n",
       "       [ 3,  8, 13],\n",
       "       [ 4,  9, 14]])"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [],
   "source": [
    "arr = np.random.randn(6,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.35887978,  0.07179346,  0.23672933],\n",
       "       [ 1.00897318, -0.6427317 , -0.2634886 ],\n",
       "       [ 0.35069723, -0.9631548 , -0.22071388],\n",
       "       [ 2.33574369,  0.80931488,  1.81192735],\n",
       "       [-0.86535201, -0.0091459 ,  1.31177254],\n",
       "       [-0.94785212, -0.50353941, -3.33623965]])"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 8.37276645,  1.36350744,  5.83110066],\n",
       "       [ 1.36350744,  2.25455167,  3.5332803 ],\n",
       "       [ 5.83110066,  3.5332803 , 16.30850456]])"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.dot(arr.T,arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 0,  1,  2,  3],\n",
       "        [ 4,  5,  6,  7]],\n",
       "\n",
       "       [[ 8,  9, 10, 11],\n",
       "        [12, 13, 14, 15]]])"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr = np.arange(16).reshape((2,2,4))\n",
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 0,  1,  2,  3],\n",
       "        [ 8,  9, 10, 11]],\n",
       "\n",
       "       [[ 4,  5,  6,  7],\n",
       "        [12, 13, 14, 15]]])"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.transpose((1,0,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 0,  1,  2,  3],\n",
       "        [ 4,  5,  6,  7]],\n",
       "\n",
       "       [[ 8,  9, 10, 11],\n",
       "        [12, 13, 14, 15]]])"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.transpose((0,1,2)) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [],
   "source": [
    "arr = np.arange(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.        , 1.        , 1.41421356, 1.73205081, 2.        ,\n",
       "       2.23606798, 2.44948974, 2.64575131, 2.82842712, 3.        ])"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.        , 1.        , 1.41421356, 1.73205081, 2.        ,\n",
       "       2.23606798, 2.44948974, 2.64575131, 2.82842712, 3.        ])"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr ** 0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,\n",
       "       5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,\n",
       "       2.98095799e+03, 8.10308393e+03])"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.exp(arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [],
   "source": [
    "points = np.arange(-5,5,0.01)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-5.  , -5.  , -5.  , ..., -5.  , -5.  , -5.  ],\n",
       "       [-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99],\n",
       "       [-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98],\n",
       "       ...,\n",
       "       [ 4.97,  4.97,  4.97, ...,  4.97,  4.97,  4.97],\n",
       "       [ 4.98,  4.98,  4.98, ...,  4.98,  4.98,  4.98],\n",
       "       [ 4.99,  4.99,  4.99, ...,  4.99,  4.99,  4.99]])"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xs,ys = np.meshgrid(points,points)\n",
    "ys"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [],
   "source": [
    "z = np.sqrt(xs ** 2 + ys ** 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[7.07106781, 7.06400028, 7.05693985, ..., 7.04988652, 7.05693985,\n",
       "        7.06400028],\n",
       "       [7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,\n",
       "        7.05692568],\n",
       "       [7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,\n",
       "        7.04985815],\n",
       "       ...,\n",
       "       [7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 , 7.03571603,\n",
       "        7.04279774],\n",
       "       [7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,\n",
       "        7.04985815],\n",
       "       [7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,\n",
       "        7.05692568]])"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "z"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [],
   "source": [
    "xarr = np.array([1.1,1.2,1.3,1.4,1.5])\n",
    "yarr = np.array([2.1,2.2,2.3,2.4,2.5])\n",
    "cond = np.array([True,False,True,True,False])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1.1, 2.2, 1.3, 1.4, 2.5]"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result = [x if c else y  for x,y,c in zip(xarr,yarr,cond)]\n",
    "result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.1, 2.2, 1.3, 1.4, 2.5])"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result = np.where(cond,xarr,yarr)\n",
    "result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-1.09128271,  1.32096854, -0.11446341,  1.59945347],\n",
       "       [-0.58680681,  0.61709856,  1.18717894,  0.14074642],\n",
       "       [ 1.72329212, -0.91739502,  0.67984493,  0.89759957],\n",
       "       [-0.07350521, -0.77026482, -0.07908738,  0.38456177]])"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr = np.random.randn(4,4)\n",
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[False,  True, False,  True],\n",
       "       [False,  True,  True,  True],\n",
       "       [ True, False,  True,  True],\n",
       "       [False, False, False,  True]])"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr>0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-2,  2, -2,  2],\n",
       "       [-2,  2,  2,  2],\n",
       "       [ 2, -2,  2,  2],\n",
       "       [-2, -2, -2,  2]])"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.where(arr>0,2,-2) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.18743938, -0.70596109, -0.60728351, -1.08609419],\n",
       "       [-1.09637548,  0.85230942, -1.26279198,  2.18283292],\n",
       "       [ 1.1375414 , -0.0245778 ,  0.70893034,  2.97894578],\n",
       "       [-1.59489145, -0.10192168,  0.09262342, -0.02016261],\n",
       "       [-0.50408045,  0.84294919, -1.90684783, -0.37363626]])"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.random.randn(5,4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.30737118545974335"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.mean()  #avg  args=0 per col | avg = 1 per row"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.30737118545974335"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.9179389673558935"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1,  3,  6, 10, 15], dtype=int32)"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#累加函数\n",
    "arr = np.array([1,2,3,4,5])\n",
    "arr.cumsum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [],
   "source": [
    "result = np.min(arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 109,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "54"
      ]
     },
     "execution_count": 168,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(np.random.randn(100) >0).sum()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 170,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bools = np.array([False,False,True,False,True])\n",
    "bools.any()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 171,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bools.all()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.15381779, -1.03851709,  1.53915177,  0.34152678,  0.52686215,\n",
       "       -1.73241523, -1.43540805, -0.26578504, -0.51490616,  0.55007146,\n",
       "       -1.03572123,  1.39140782,  0.57069372,  0.21078461, -1.66808108,\n",
       "        1.27601582,  1.77850322,  0.13015613,  1.18662615, -0.05034045,\n",
       "       -0.1220216 , -0.563239  , -0.77311675, -2.18835839,  2.47132646,\n",
       "       -0.3699304 ,  0.36476393, -0.64714203,  0.84261124, -0.27216367,\n",
       "       -0.0461262 , -0.21360464, -1.02652678,  0.17880315, -0.55210684,\n",
       "       -1.33436981,  0.26432123, -0.43174584, -0.74322366,  0.10902242,\n",
       "       -1.15591257, -1.44686399,  0.05988419, -0.04856441,  0.98633648,\n",
       "        0.44871746,  1.10750933, -0.31515951, -0.07847968,  0.74045862,\n",
       "       -1.82045017, -1.02864313,  0.2342411 ,  0.27889303, -0.6440855 ,\n",
       "       -0.99572052, -0.46397841,  0.48210296,  1.83689237,  0.78372785,\n",
       "       -0.89331994,  0.02747474, -0.56205572, -0.11756911, -1.96067333,\n",
       "       -1.64345382,  0.26774303,  1.93397661,  1.46761633,  0.7099573 ,\n",
       "       -1.1897702 ,  0.24583075, -1.12952089, -0.01002409,  0.7139222 ,\n",
       "        0.87625374,  0.88262158,  0.9655363 , -0.48035479,  0.95806154,\n",
       "        0.88440402,  0.1199175 , -0.39949534, -0.23886395,  0.3530345 ,\n",
       "       -1.57450706, -1.76816528, -0.16731357, -0.28187647, -2.16367387,\n",
       "       -1.55315679, -0.35355783,  0.16818092,  2.5411525 ,  0.38535838,\n",
       "        0.73597229,  0.44885189,  2.33117285,  0.77037338,  0.49277116])"
      ]
     },
     "execution_count": 176,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr = np.random.randn(100)\n",
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-2.18835839, -2.16367387, -1.96067333, -1.82045017, -1.76816528,\n",
       "       -1.73241523, -1.66808108, -1.64345382, -1.57450706, -1.55315679,\n",
       "       -1.44686399, -1.43540805, -1.33436981, -1.1897702 , -1.15591257,\n",
       "       -1.12952089, -1.03851709, -1.03572123, -1.02864313, -1.02652678,\n",
       "       -0.99572052, -0.89331994, -0.77311675, -0.74322366, -0.64714203,\n",
       "       -0.6440855 , -0.563239  , -0.56205572, -0.55210684, -0.51490616,\n",
       "       -0.48035479, -0.46397841, -0.43174584, -0.39949534, -0.3699304 ,\n",
       "       -0.35355783, -0.31515951, -0.28187647, -0.27216367, -0.26578504,\n",
       "       -0.23886395, -0.21360464, -0.16731357, -0.15381779, -0.1220216 ,\n",
       "       -0.11756911, -0.07847968, -0.05034045, -0.04856441, -0.0461262 ,\n",
       "       -0.01002409,  0.02747474,  0.05988419,  0.10902242,  0.1199175 ,\n",
       "        0.13015613,  0.16818092,  0.17880315,  0.21078461,  0.2342411 ,\n",
       "        0.24583075,  0.26432123,  0.26774303,  0.27889303,  0.34152678,\n",
       "        0.3530345 ,  0.36476393,  0.38535838,  0.44871746,  0.44885189,\n",
       "        0.48210296,  0.49277116,  0.52686215,  0.55007146,  0.57069372,\n",
       "        0.7099573 ,  0.7139222 ,  0.73597229,  0.74045862,  0.77037338,\n",
       "        0.78372785,  0.84261124,  0.87625374,  0.88262158,  0.88440402,\n",
       "        0.95806154,  0.9655363 ,  0.98633648,  1.10750933,  1.18662615,\n",
       "        1.27601582,  1.39140782,  1.46761633,  1.53915177,  1.77850322,\n",
       "        1.83689237,  1.93397661,  2.33117285,  2.47132646,  2.5411525 ])"
      ]
     },
     "execution_count": 177,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.sort()\n",
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 178,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['bob', 'john', 'tom', 'bob', 'jack', 'tom'], dtype='<U4')"
      ]
     },
     "execution_count": 178,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "names = np.array(['bob','john','tom','bob','jack','tom'])\n",
    "names"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['bob', 'jack', 'john', 'tom'], dtype='<U4')"
      ]
     },
     "execution_count": 179,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.unique(names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['bob', 'jack', 'john', 'tom']"
      ]
     },
     "execution_count": 180,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sorted(set(names))  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True, False, False,  True,  True,  True, False])"
      ]
     },
     "execution_count": 185,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "values = np.array([3,0,0,3,2,5,6])\n",
    "np.in1d(values,[2,3,5])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "metadata": {},
   "outputs": [],
   "source": [
    "arr = np.arange(10)\n",
    "np.save(\"some_array\",arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
      ]
     },
     "execution_count": 187,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.load(\"some_array.npy\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.savez('array_archive.npz',a=arr,b=arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "metadata": {},
   "outputs": [],
   "source": [
    "arch = np.load('array_archive.npz')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
      ]
     },
     "execution_count": 190,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arch['b']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 191,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
      ]
     },
     "execution_count": 191,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.savez_compressed('arrays_compressed.npz',a=arr,b=arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 193,
   "metadata": {},
   "outputs": [],
   "source": [
    "x=np.array([[1.,2.,3.],[4.,5.,6.]])\n",
    "y=np.array([[6.,23.],[-1,7],[8,9]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1., 2., 3.],\n",
       "       [4., 5., 6.]])"
      ]
     },
     "execution_count": 194,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 6., 23.],\n",
       "       [-1.,  7.],\n",
       "       [ 8.,  9.]])"
      ]
     },
     "execution_count": 195,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 28.,  64.],\n",
       "       [ 67., 181.]])"
      ]
     },
     "execution_count": 196,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.dot(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 28.,  64.],\n",
       "       [ 67., 181.]])"
      ]
     },
     "execution_count": 197,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#x.dot(y) ===> np.dot(x,y)\n",
    "np.dot(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 198,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 6., 15.])"
      ]
     },
     "execution_count": 198,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x @ np.ones(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "metadata": {},
   "outputs": [],
   "source": [
    "samples = np.random.normal(size=(4,4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 200,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-2.26971662,  0.28355133, -0.73381443, -0.17315745],\n",
       "       [ 0.25592416, -1.9340289 , -0.27126814, -1.07302232],\n",
       "       [ 0.04466312,  1.21212792, -0.96931044, -0.00587559],\n",
       "       [-0.61196872,  1.50432085,  0.15666716,  0.42419718]])"
      ]
     },
     "execution_count": 200,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "samples"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "metadata": {},
   "outputs": [],
   "source": [
    "from random import normalvariate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "metadata": {},
   "outputs": [],
   "source": [
    "N = 1000000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 207,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "858 ms ± 43.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
     ]
    }
   ],
   "source": [
    "%timeit samples = [normalvariate(0,1) for _ in range(N)] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 206,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "30.2 ms ± 1.25 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
     ]
    }
   ],
   "source": [
    "%timeit np.random.normal(size=N)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 208,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(1234)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 209,
   "metadata": {},
   "outputs": [],
   "source": [
    "rng=np.random.RandomState(1234)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 210,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.47143516, -1.19097569,  1.43270697, -0.3126519 , -0.72058873,\n",
       "        0.88716294,  0.85958841, -0.6365235 ,  0.01569637, -2.24268495])"
      ]
     },
     "execution_count": 210,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rng.randn(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 212,
   "metadata": {},
   "outputs": [],
   "source": [
    "import random\n",
    "position = 0\n",
    "walk = [position]\n",
    "steps = 1000\n",
    "for i in range(steps):\n",
    "    step = 1 if random.randint(0,1) else -1\n",
    "    position += step\n",
    "    walk.append(position)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 213,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1e3c3a002b0>]"
      ]
     },
     "execution_count": 213,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAD8CAYAAABw1c+bAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xl429d54PvvC5AgxVVcQe27SILeRS/yqo2InaZ1m6bTZDqte5s+nt6b3El6Z55pejuTuZPOfW6SmTZdkpuMG2ed3rRpm7SexLVBSZZl2ZJtWt5EkBQpapcAbuK+gcC5f+AHkiBBEiRIggLez/PwIXDwA34Hhvzix/ec8x4xxqCUUip92JLdAaWUUqtLA79SSqUZDfxKKZVmNPArpVSa0cCvlFJpRgO/UkqlmQUDv4hsEZFXRKRJRBpF5HNWe7GI1ItIq/W7aI7nP2Md0yoizyz3G1BKKbU4stA8fhHZAGwwxpwVkXzgHeCXgd8GeowxXxaRLwBFxpg/mPHcYqABqAWM9dx9xphby/5OlFJKxWXBK35jzE1jzFnr9gDQBGwCnga+bx32fcJfBjN9BKg3xvRYwb4eeHI5Oq6UUmppMhZzsIhsB+4F3gScxpibEP5yEJHyGE/ZBFyddv+a1RbrtZ8FngXIzc3dV1VVtZiuKaVUWnvnnXe6jDFl8Rwbd+AXkTzgH4DPG2P6RSSup8Voi5lbMsY8BzwHUFtbaxoaGuLtmlJKpT0RuRzvsXHN6hGRTMJB/6+NMT+xmv1W/j8yDtAR46nXgC3T7m8GbsTbOaWUUssvnlk9AjwPNBlj/nTaQy8AkVk6zwD/FOPpLwNuESmyZv24rTallFJJEs8V/yPAbwKHROQ96+ejwJeBOhFpBeqs+4hIrYh8G8AY0wP8MfC29fMlq00ppVSSLDidMxk0x6+UUosjIu8YY2rjOVZX7iqlVJrRwK+UUmlGA79SSqUZDfxKKbUGHG/28/ypiwSCoRU/lwZ+pZRaA35w+jLff+MSGba4FscmRAO/Ukol2eDYBG+0deN2OYmzKkJCNPArpVSSvdrSyXgwhLumYlXOp4FfKaWSzOP1UZzrYN+2mNuaLDsN/EoplUSBYIjjzR0crirHvgr5fdDAr5RSSfVmew8DoxOrluYBDfxKKZVUHq+P7Ewbj+4uXbVzauBXSqkkMcZQ7/Xz+J4y1jnsq3ZeDfxKKZUk5673c7NvdFXTPKCBXymlkqbe68MmcKgq1s61K0cDv1JKJYnH66d2ezHFuY5VPa8GfqWUSoIr3cM0+wb4yCqneSCOzdZF5DvAx4AOY8wdVtvfApXWIeuBXmPMPTGeewkYAILARLybBCilVKrzeH0AuF3OVT/3goEf+B7wdeAHkQZjzK9HbovInwB98zz/oDGma6kdVEqpVOTx+qmqyGdLcc6qn3vBVI8x5iQQc59cayP2fwH8aJn7pZRSKatnaJyGSz2rPpsnItEc/2OA3xjTOsfjBvCIyDsi8ux8LyQiz4pIg4g0dHZ2JtgtpZRau441+QmZ5KR5IPHA/ynmv9p/xBhzH/AU8BkReXyuA40xzxljao0xtWVlZQl2Syml1i6P18/GwmxqNhYk5fxLDvwikgF8HPjbuY4xxtywfncAPwUeWOr5lFIqFYyMB3mttRN3TcWq1N6PJZEr/iNAszHmWqwHRSRXRPIjtwE3cC6B8yml1G3vtdZORgMh6pKU5oE4Ar+I/Ag4DVSKyDUR+bT10CeZkeYRkY0i8qJ11wmcEpH3gbeAnxtjXlq+riul1OoYGA3wf/z4PW72jcT9nL841spRr39Wu8frpyA7gwd2FC9nFxdlwemcxphPzdH+2zHabgAftW63A3cn2D+llEq6fz7n4ydnr7O1OIfPH9m74PGdA2N87eh57txUyJFpV/YTwRDHmvwcqion05689bO6clcppRbgafRH/V7IsSY/xsAH1/q40Tv1V8I7l29xaziQtGmcERr4lVJqHsPjE7zW2klBdgbem/1c7Rle8DmRdA7A0SZ/VLsjw8bje5M7c1EDv1JKzeO11i7GJkL8wVNVQHQgj2VobIJTbV18Yt8WdpblUm/l+SO19x/ZVUJeVjxFE1aOBn6llJqHpzF89f4varew15m3YLrn5PlOxidCuGucuF0VnL7QTd9IgBb/AFd6hpOe5gEN/EopNaeJYIjjzX4OVzvJtNtwuyp461IPvcPjcz6n3uunKCeT2m1FuGucTIQMJ1o68DT6EYHD1atbez8WDfxKKTWHBmswNjLnvs7lJBgyHG/uiHl8IBjiWHMHh6qcZNht3LN5PWX5WXi8fuq9fu7dsp7y/OzVfAsxaeBXSqk5eBqjB2Pv3FRIRUH2nOmety/20DcSwF0T/qKw2YQj1U6ONfn58HrfmkjzgAZ+pZSKyRhDfZOPR3eXTg7G2mxCncvJydZORgPBWc/xeP1kZ9p4fM/UrB13jZPRQCh8O4mrdafTwK+UWnZvXOjid773NuMToaj29s5BPvncaboGx1bs3P/91Qt89aXmhF+n2TfA1Z6RWaUV6lxOhseDnGqN3mYkMmvn0d1lrHPYJ9sf3lVCrsPOrrJcdpblJdyv5aCBXym17L7/xiWON3fw5sXuqPYfN1zjTHsPP//g5oqcdyIY4puvXuDbpy4yNDaR0GvNNRj70M4S8rMyJqdpRjTe6Od678isq/qsDDt//Mt38B8+5kqoP8tJA79SalmNBoKcPB++Gp4ZHOut7QZnti+Xhsu36B0OMD4R4uT5xPb1qG/yxRyMdWTYOFBVzrFmP8GQmTre68c2x6ydj9+3mYOVyZ/NE6GBXym1rE61djESCOIsyMLT6MeYcHBs6xjkQucQzoIszrR30zccWPZzRwZj1+dk4kngy+V67wjnrvfPORjrdjnpGhzn3Su3ps7t9VO7rZiSvKwln3e1aOBXSi0rj9dHfnYGv39kL77+UT68Ht6SO3KV/8WP1TARMrzSEntK5FJNH4w9XBWeSRMIhhZ+Ygz1jfNvhH6gsoxMu0x+uVztGabpZv/kbJ61TgO/UmrZBEOGY00dHKws5yM1FdhtMhnw670+7txUyFN3VFCWn7Xs6Z7pg7HuGif9oxO8fTHmduELqm/yzzsYm5+dyf5dpXgafZODukBSa+wvhgZ+pdSyOXvlFt1D47hrnBTlOrh/exGeRj8d/aO8e7UXt8s5Obf9REsHYxOzp0Qu1fTB2Mf2lJKVYVtSuqdvOMCZ9oU3Qne7nFzqHqatYxCP10elM59tJblL7f6q0sCvlFo29V4/DruNJ6wFT25XBS3+AZ5//SLGMBlM3TVOhsaDvHGhe76XW9y5m3zct7WI8vxschwZPLanjHrv1BhDvF5p6SAYMgvOuY9c3f+44SpvXey5bdI8EN8OXN8RkQ4ROTet7f8Skesi8p7189E5nvukiLSISJuIfGE5O66UWluMMbzc6GP/rhLyszOBqeD4/GsX2Vqcw15nOHUSmdseb337hUQGY6enWtwuJ9d7R2i80b+o1/J4fZTnZ3H35vXzHucsyObuLev57uuXCJnbJ80D8V3xfw94Mkb714wx91g/L858UETswDeApwAX8CkRWTsTWZVSy6q1Y5DL3cNRV75binOo3lDAhHUFHdlcPCvDzoHKco42+QmFFndFHkuswdjD1eXYhEWle0YDQU60dHLESkktxO0KF2GrKMjmzk2Fi+94kiwY+I0xJ4GljJA8ALQZY9qNMePA3wBPL+F1lFK3gcgA55Hq6Ctf97QCZ1HtNU46B8Z492pv4udu8rO7PC9qMLYkL4vabcV4rC+FeJy+0M3weDDuq/eP1Ey9t8iX2u0gkRz/Z0XkAysVVBTj8U3A1Wn3r1ltMYnIsyLSICINnZ2JLbxQSq0+T6OPe7asx1kQveDpf3lkO//3r9zB/dujNxc/UFlOxrRZP0sVGYyNFazrXE5rts/Cu2ZBOM2T67Dz8K6SuI7fVZbHf/u1u/nMwd2L6nOyLTXwfxPYBdwD3AT+JMYxsb7+5vybzhjznDGm1hhTW1aW3G3JlFKL4+sb5f1rfTEHONfnOPiNB7fNSp0UrsvkoZ0leLzxX5HHMt9gbOTLIJ50TyhkqPd2cKCqnKwM+4LHA4gIn9i3mYrC5JdaXowlBX5jjN8YEzTGhIC/IpzWmekasGXa/c3AjaWcTym1ttVb2xEutvpknctJe+cQbR2DSz73fIOx20tz2evMmywVMZ93r/bSNTi2ZiporqQlBX4R2TDt7q8A52Ic9jawR0R2iIgD+CTwwlLOp5Ra2zyNPnaW5rJrkdUnI1fkS033xDMY63ZV8NbFHm4Nzb1rFoS/QDJswoE1VFNnpcQznfNHwGmgUkSuicinga+KyIci8gFwEPh969iNIvIigDFmAvgs8DLQBPzYGNO4Qu9DKZUk/aMBzrR3U1ez+AHOjevXceemwriuyGOJDMbOd5XurnESMsy5a1ZEvdfP/l0lFK7LXFJfbicLbvVujPlUjObn5zj2BvDRafdfBGZN9VRKpY4TLZ0EggsveJpLncvJ146ep6N/lPKCxeXKPV4feVkZ7J9nMHZy1yyvj1/dtznmMW0dg7R3DvHbD29f1PlvV7pyVymVEE+jj9K8LO7ZEmty38LcNU6MgaNNiyvaFhmMfaKybN7BWBFr16zzXTF3zQImB5hnTkVNVRr4lVJLNjYRzrHXucqxx7HgKZZKZz5bi3MWne5ZzGCsu8bJSGD2rlkR9V4/d20uZOP6dYvqw+1KA79SalIwZBa1kvZMew+DYxMJlSuIXJG/3tbNYIxdsyaCoZj1dhYzGPvgjvCuWbGmjnb0j/LulV7q0uRqHzTwK6Usxhie+vOTfPXllrif42n0keOw8/Cu0oTO7XY5GQ+GeLUlevHmyHiQ/V8+zvffuDTrOfWNfh7aGd9grCPDxsGqco42dUTtmgVTU1HrbqMia4nSwK+UAsJ7xp73D/KP716P66o/FDIcbfLzxN4ysjPjW/A0l33biijKyZyV7jnV1kXnwBg/ffd6VHtbxyDtXUOLqohZ53LSMzTO2Wm7ZkE4zbO1OIdKZ/7S38BtRgO/UgpgsqbN9F2z5vPB9T78/WPLUo44w27jcLWT480dUbtmRfr0/rU+fH2jU+1LGIyd3DVrWu2ewbEJ3mjrjioglw408CulgHBZg+oNBVG7Zs2n3uvDbhMOVS5PisTtCu+a9Za1a1YwZDjW3DFZ9TKSkoHwpiuLHYzNz87k4V2leKbV6H+1pZPxYGjBTVdSjQZ+pRRXuodp9g3wq/dt4oHtxXHVz/E0+nlwRzGFOcuz4OmxPWVkZ9omr8jfuXyLnqFx/vUTO9lRmjvZ3tE/yntXlzYYW+dycrl7mFarRITH66M418G+bUubinq70sCvlJoM9G5XBe4aJ+f9g1zqGprz+ItdQ7R2DC5rXZt1DnvUrlmeRh8Ou40DleW4XU7OtHfTPxqYqgu0hKv0yaJtjT4CwRDHmzs4XLX0qai3Kw38Sik8Xj9VFflsLcmJq35OZBD2yDIXNKtzObnRN0rjjX48Xj8P7y4hLyuDOpeTQNBwoqUTT6M/ajevxYjsmuXx+nmzvYeB0cSmot6uNPArleZ6hsZpuNQzefW+uSgH14aCedM9nkY/NRsL2FyUs6x9OVwV3jXr68fbuNIzPBmU791aRGmeg5+evcbpC4kNxrpdTj641scPTl8iO9PGY3vSrwy8Bn6l0tyxJj8hE506cdc4eefyLboGx2Yd3zU4xjtXbuF2Lf+AaEleFrXbi3nJyudH8vh2m3Ck2skryzAYG9k1y+P18/ieMtY5EpuKejvSwK9UAvz9ozFXla5Fc/XV4/WzsTCbmo0Fk211LquiZYz6Ocea/JgV3Fw88pfHPVvWRxVti5wv0cHYXWV57CjNjXrNdKOBX6klOu8fYP//c4yXziW2g9RquNQ1xCNfPs5PzkYvhBoZD/Jaa7ie/fTUiWtDAZvWr4uZ7vE0+tlctI7qDSuz4MntqsAm8NQd0Vf1j+wuJT87A7fLmdBgrIjw1B0VOKy1A+lIA79SS/TihzcJGfjZBzeT3ZUFvdzoYyJk+NkH0ZvgvdbayWggNCttE6mf81prF8PjU/VzhsYmeK2ta0U3F99aksM/f+5xfufRHVHt2Zl2fva/P8of/UJ1wuf4N4f38OLnHqM415Hwa92O4tmI5Tsi0iEi56a1/VcRabY2W/+piMze8yx83CVrw5b3RKRhOTuuVLJ5GsOzXk60dMxZ7netiOw5O7MQmsfrJz87gwd3Fs96jrvGydhEiJPnpypavtbayfjE7C+K5VZZkU+mfXZ42laSS3524usGsjPt7C5f/KygVBHPFf/3gCdntNUDdxhj7gLOA384z/MPGmPuMcbULq2LSq09V3uG8d7s59HdpQyNBzl9oTvZXZpT58AYZ6/c4pHdJVGF0CaCIY41+TlcVR4zyD6wvZjCdZlR6R5Po5/1OZncvz29FjylmgUDvzHmJNAzo81jba0IcIbwRupKpY2j1iKiL/6ii7w5yv2uFZHB2D98qpriXMfkHPx3Lt/i1nCAujmu3jPsNg5XlXO8uYOJYCj8RdHcwaGqcjJifFGo28dyfHq/A/zzHI8ZwCMi74jIs/O9iIg8KyINItLQ2dk536FKJZ2n0c9eZx57nfk8UVlGvbdjUXXsV5PHGx6MrdlYwKGqco5ZhdA8Xj8Ou40nKueex+6ucdI7HODtS7d461IPfSOBFU/zqJWXUOAXkT8CJoC/nuOQR4wx9wFPAZ8Rkcfnei1jzHPGmFpjTG1ZWfotqFC3j97hcd661DMZAN0uJ12DY7x7tTfJPZttaGyCU21duF0ViAhul5OB0QnOtHdT7/XziLUydi6P7y0jK8OGx+vD0+gnK8PG43sTq72vkm/JgV9EngE+BvyGmWMis7X5OsaYDuCnwANLPZ9Sa8Xx5vBmHpE54Acqy8mwyZpM95w8Hx6MjfQ1UghtamXs/FfvOY4MHt1diqfRT73Xz2N7SslxzP1FoW4PSwr8IvIk8AfALxljhuc4JldE8iO3ATdwLtaxSt1OPI1+KgqyJ8sFF67LZP+uEuobFy5lvNo83ujB2EghtDcv9iACR1wLb1vornFyvXeE670jmuZJEfFM5/wRcBqoFJFrIvJp4OtAPlBvTdX8lnXsRhF50XqqEzglIu8DbwE/N8a8tCLvQqlVMhoIcrK1kzqXE9u0RURul5P2riHarHK/8bjeO0JH/+jCBy7RVPVJZ9RgbGRl7L1b1lOenz3X0ycdrnYiAjaBw9ULf1GotW/Bv9mMMZ+K0fz8HMfeAD5q3W4H7k6od0qtMa+3dTE8Hpy11P+Iy8l//KdGXm70sbt894KvY4zht55/k5LcLH78e/tXpK9vXwwPxs7s6+FqJzkOO79498a4Xqc0L4tHdpUiEq6lo25/mqxTahE8jX7yszJ4aGdJVPuGwnXctbmQeq+fzxxcOPC3dQxyoXOI9q4hOgfGKMtf/oDq8cYejC3OdXDqDw6xPo5NyiOe+619y909lUQ6GVepOIW3AvRzoKocR8bs/3Xqqp28d7U3rvRNZCWtMXC8efnHBowx8w7GFuc6olJVC8lxZOigbgrRwK9UnN69couuwfE5d52KlAqevjfsXDxeP3dvLgwXQluBQeHGG/06GKvmpIFfqTh5vH4y7cKBORY87XXmsa0kZ8FA7u8f5f2rvbhrwtscvtbWxdC0+jnL1VcdjFVz0cCvVBwie8Du31U6Z5EwEaGu2snpC90MjAbmfK3IloZul5M6l5PxiRCvtS7vavV6r59924p0MFbFpIFfqTi0dQxyqXt4wc3F3TUV4UJo5+cO5B6vn+0lOewuz5sqhLaM6Z6rPcM03ezXNI+akwZ+peIQGYxdaMemfduKrEJosQP5wGiA0xe6cNeESyhk2G0crg7Xz5kIhpalr/Vx9lWlLw38SsXB4/Vz95b1OAvmX/Bkt8lkRcvxidmB/ERLJ4GgiQrKbpeTvpEAb13qmXX80vrqY68zj+3W9oJKzaSBX6kFTA7GxnkF7a6pYGB0gjcvzq7R7/H6Kcl1cN/WqXr2k4XQliHdc2tonLcu9miaR81LA79SC5g+GBuPx/aUsi7TPiuQj0+EONHcweHq8qg9Y3McGTy2p5R6rz/hjduPN3cQWsGN0FVq0MCv1AI8Xj87SnPj3qovO9POY3tKOdoUHcjPtHczMDYR82q8zhUuhOa92Z9gX31UFGRz1+bChF5HpTYN/ErNoz8yGLvIzcXdNRXc7Bvl3PWpQO7x+liXaefRPbPr2UcKoSWS7hkNBDl5fmU3QlepQQO/UvN4NcZgbDwOVZVjEyZr9IdChqPeDh7fW0p2pn3W8aV5WezbWjTnbKB4nGrtYiQwu4CcUjNp4FdqHh6vn9I8B/duXdzm4sW5Du7fXjwZyD+83oevf3TeQVd3jRPvzX6u9sTc4iKOvvpiFpBTaiYN/ErNITIYe6TaGTUYGy93TQXNvgEudw/h8fqw24RDVXOXUIjshrWUq/5gyHCsqYODcxSQU2o6/Rei1Bwig7FLTZ1EZgHVe8PbFt6/vYiiXMecx+8ozWVPed6SAv/ZK7foHhrXNI+KS1yBX0S+IyIdInJuWluxiNSLSKv1O+bfwiLyjHVMq7VPr1K3BY/XR47DziO7l7a5+JbiHKoq8vnB6cuc9w/GNbfeXePkrUs99A6PL66vjb55C8gpNV28V/zfA56c0fYF4JgxZg9wzLofRUSKgf8EPEh4o/X/NNcXhFJrSWQw9om9ZTEHY+PlrqngipWzj+dq3O2qIBgyHG/uiPscxhg8Xj8Pz1NATqnp4gr8xpiTwMz15E8D37dufx/45RhP/QhQb4zpMcbcAuqZ/QWi1JoTGYxNNHUSSfdUbyhgS3HOgsffuakQZ0EWLzf6Zj12pXuYH799dVZ7a8cgl7uHNc2j4pZIjt9pjLkJYP2ONWq1CZj+L/Wa1TaLiDwrIg0i0tDZubwlapVarHgGY+NRs7GAR3eX8psPbYvreJtNqHM5OXm+i9FAMOqxPzt2nn//Dx9wuXsouq/Wl4QGfhWvlR7cjTUVIuaadGPMc8aYWmNMbVmZ5ilVctV7/TywvZj1OXMPxsZDRPgfv/sg//LBrXE/p85VwUggyOttXZNtE8HQZPpn5uBvfZwF5JSKSCTw+0VkA4D1O1ZS8hqwZdr9zcCNBM6p1Iq72DUUHoytSc4V9P6dJeRnZUSt4n370i16hwNk2iWq3dc3yvvX+uKuI6QUJBb4XwAis3SeAf4pxjEvA24RKbIGdd1Wm1JrVr03uakTR4aNA1XlHGv2EwyF/0D2eH04Mmw8s387DZd76B4cC/fV2t/3I0n6klK3p3inc/4IOA1Uisg1Efk08GWgTkRagTrrPiJSKyLfBjDG9AB/DLxt/XzJalNqzar3+nFtKGBz0cKDsSulzuWka3Ccd6/cwhhDvdfPo7tL+eV7NxEycMxK+3gafewozWVXWXwF5JQCyIjnIGPMp+Z46HCMYxuA3512/zvAd5bUO6VWWdfgGA2Xb/G5w3uS2o8DlWVk2oV6r58cRwbXbo3w2YO7qdlYwKb16/A0+nnyjgrOtHfzO4/s0KJsalHiCvxKpYvjTR2YNVDPviA7k4d2luDx+lnnsCMSqeAZnvXzo7eu8NKHviUVkFNKSzYoNY3H62PT+nW4NhQkuyu4ayq42DXE/zhzhfu2FlGWnwWEv5TGJkJ89eWWJRWQU0oDv1KW4fEJXmvtwl2zNurZ11WHr+S7BseiZu08sKOYguwMugbHllxATqU3DfxqRZ273sefHT0/a0vBm30j/PHPvIxNBOd45sp5o62L775+cVb7yfNdjE2E1kzqpKIwm7utnbSm9ynTbptcWLZW+qpuLxr41Yr6xitt/NnRVto6BqPaf3j6Ms+fusiJltVfpf1fPS38l583cWsouhCax+ujcF0mD2wvXvU+zeXZx3fx67Vb2Dlj1s5vPbydI9XOJReQU+lNA79aMaOBIK+eDwd2z4zVppH7iWw1uBQd/aO8e6V3ViG0yMrYw9XlZNjXzv8Wv3DXBr7yibtmtd+3tYhvP1ObUAE5lb7Wzr9wlXLeuNDF8HiQHIc9KvC3dw7S1jFIjsPO8WY/E8HQqvUpsuApx2GPKn0QWRmrK2BVOtDAr1aMp9FPXlYGv/vYTt6/2ou/fxSYqjXz+0f2cms4QMPlW6vap20lOXz8vk28er5zshCax+sjK8PG43u1TpRKfRr41YoIhgxHm/wcqCzjY3dtAKYCvsdaGfupB7fiyLAltMH4YgyMBjh9oZu6aiduqxDaqdaucD37xvDK2ByHLm1RqU8Dv1oR7129RddgeCvAPeV5bC/JweP10zkwxtkrt3DXOMnLyuCRXSV4vL5Zs35WwqvnOxkPhnDXVPCQVQit3uun6eYA13tHklaUTanVpoFfrQhPo59Mu3CwqhwRwV1TwekLXfzTe9cxhsltCN01FVztGaHFP7Difar3+inOdbBvWxGODBsHq8o52uTnpXM3J1fGKpUONPCrZRfZCvChnSUUWFsB1rmcBIKGPz/ayqb166jekA/A4epyRFZ+ds/4hDVrp6p8csFTnctJ99A43339Evu2FlGal7WifVBqrdDAr5bdhc5BLnYNRc2QuW9rESW5DgbGJqJWxpbnZ3PvlvV4vLO3GlxOb17sZmB0AnfN1IbnkUJokT4plS408N8m/uf7N/jKS81JOfdXX2rmhfdn75/zw9OX+KuT7bPaX7au3o9MC/x2m3DESqVE0jwR7poKzl3v50bvSFz9Mcbwhz/5kFOtXbMe+/Ojrfxdw+x9aeu9ftZl2nlsz9SCp/zsTB7eFb5fN6NPSqUyDfy3ia8fb+Nbr16gY2B0Vc/bOTDGN1+9wNePt0a1TwRD/Gn9ef7s6PlZe8PWe/3ctbmQDYXroto//dgOntm/jfu3RxcVi5QdiHd2j/dmPz966wrPvRb9pdM3EuAvj7fyF8dbowaLI/XsH9tTOmvB02cO7uazB3ezozQ3rnMrlQo08N8GLncP0eIfwBg41hRrh8uVc6zJjzFw3j/Ipa6pTb7fuXyLW8O7eqYfAAAYj0lEQVQBhsaDnL7QPdnu7x/lvau9MRdC7XXm85+fvmPWythdZXnsKsuNO90T+YI4faGL/tHAZPuJlg4mQoarPSM0+6YGi89d7+dm32hUmifigR3F/LuPVMZ1XqVSxZIDv4hUish70376ReTzM445ICJ90475YuJdTj+RQFeUk7lqc94jPF4/RTmZUf2I3HbYbeTOWJUbOWaxqZM6VwVvtvfQNxxY8FhPY7hPgaDh1Wm1fjxeP4XrMhGJ7qvH68MmTBY2UyrdLTnwG2NajDH3GGPuAfYBw8BPYxz6WuQ4Y8yXlnq+dOZp9FNVkc/H79vMqbYuBscmVuW8Q2MTnGrr4lfu3Uz1hoLJK/LIrJ1HdpdwoDI8JTJk7Q1b7w2vjN3rXNxWgO4aJxMhwyst8/9Fc+3WMN6b/Tz7+C5K8xyTXzpjE0FONHfw0TsruG9rUdRfD55GP/dvL6Y417GoPimVqpYr1XMYuGCMubxMr6cs3YNjNFzuwV1TgdvlZHwixMnzq1PR8uT5TsYnQrhrnLhdTt65fIuuwTFa/ANc6RmmzlWBu8ZJ58AY713rZWA0wBsXunC7Fl/P/p7N6ynLz1ow3RO5kn/yjgoOVzl5pbmDsYlwumloPIjbVUGdy8m56/1c7x2ZTJPFSvMola6WK/B/EvjRHI/tF5H3ReSfRaRmrhcQkWdFpEFEGjo7V79U71p1rLmDkAG3y8m+bUWrmu7xeP2sz8mkdlsRdS4nIRPemtDT6EcEjrjKOVBZToZN8DT6OdHSaW0FuPgga7Nm/bza0jlrsDiqT41+9pTnsaM0F3eNk8GxCc609+Dx+slx2Nm/q2RyfKG+0Tf530qLryk1JeHALyIO4JeAv4vx8FlgmzHmbuAvgX+c63WMMc8ZY2qNMbVlZVooK8LT6GdjYTY1GwvIsNs4XO3kWJOfwApXtAxEyhRXOcmw26Y2+fb6qff6uWfLesrzsylcF94btt7ri1oZuxTuGuesweLpeofHeetSz+Sc+0d2l7Iu087LjT6OesN1gbIz7ey0Bovrm/x4vOE02ZbinCX/t1Aq1SzHFf9TwFljzKzLUGNMvzFm0Lr9IpApIrpzRJxGxoOcauukblrqpM7lpH90grcv9qzoud++2EPfSGByqmVkk++T5zv58Hpf1Fx8d42TC51DvNTo40h1+ZK3Anx4V8msweLpjjd3EAxN/UWRnWnnib1l/P071+gYGJvRpwrOtPfQcKlH0zxKzbAcgf9TzJHmEZEKsSKWiDxgnS/25Zya5WRrJ6OBUFTgenxPGdmZtjmD43LxeP1WmeKp72m3y8m49ZfG9C3/IguzxidCCS2Eysqwc6CynHrv1GBxVJ8a/TgLsrhrU+FkW5017mG3CQcry6PagyEzmSZTSk1JKPCLSA5QB/xkWtvvicjvWXc/AZwTkfeBvwA+aVajDGOK8DT6KcjO4IEdU1sBrnPYeWxPGZ7G2RUtGy718PH/9/WEZ/1MLXgqiypTfP+OYgrXZbKzLJfd5VOzdjauX8edmwpnrYxdCneNk67BMd692hvVPhoIcrI1/NePbdpfFIes2jsP7Sym0Jp2ClODxZE0mVJqSkLFx40xw0DJjLZvTbv9deDriZwjXYW3AvRzqKqczBkLnupcTuq9fhpv9HPHtKvf/+/NK5y90ssrzR384t0bl3zuxhvhGTGfO7wnqj3TbuMrv3oX+dmz/9l88Rdd3OwbTXgrwMhgcb3XHzVW8HpbeDevmX9RFOU6+PLH72SvMz+q3WYTvvKrdyIii55hpFSq010n1qgGa2VsrPz04apybBJOx0QCfyAY4pi1h6zH608o8Nd7/dgkXDlzpifviJ3KuX+ZNiiPDBZ7vD6+8FRVVJ/yszLYv7Nk1nN+rXZLzNc6VKUpHqVi0ZINa5Sn0Y9jjq0AS/KyqN1ejKdxas57ZDB20/p1nGjuYHxi6bN+PF4/tduKKUlSmWJ3jZP2ziHaOgaBabt5VZXjyNB/skolSv8vWoOMMdQ3+XhkVwl5WbH/KHO7nDT7BrjaMwxMDcb+4UerGBib4Ez70sbQr/YM03SzP2rwdrVFBosjc/DfvTK1m5dSKnEa+NegcEAfmXcaYiQIerz+qMHYI9VOchz2Jde3n6q1k7wgGxksjryHem94N68Dlbq+Q6nloIF/Dar3+q2tAOcuKratJJeqinw8jb7JwVh3jXNybvtcUyIX4vH6qHTmsz3JZYrdLifvXumlo38Uj9fP/l2lk7t5KaUSo4F/DfJ4fdxrrYydT53LyduXevi7hqvhwVir+mSdy4m/f4wPr/ct6ry3hsZ562LPmkip1Fmrc7/1ajsXu4bWRJ+UShUa+NeYG70jnLveH9dqU7ergpCBH565HDUYG5nbvth0z/FIXaA1sA1hpTOfrcU5fO+NiwDU6UboSi0bDfxrzGKKit2xqYANhdmzgvX6HAcP7ihedDE3j9dHRUE2d05bG5AsIoLbKgx395b1VBTO/9ePUip+GvjXGI/Xx66yXHaWLVzPPhIcYfZgbJ3LyXl/eNPzeIwGgpw83xVVFyjZIn/1aMkFpZaXBv41pG84wJvtiysq9tlDe/jWv7qPbSXRg7FT+9jGl+451drFSCC4JtI8EfdvL+Jrv343zzy8PdldUSqlaOBfQ16x9oxdzBVuWX4WT96xYVb75qIcXBsK4k73eLw+8rMyeHDH7JWxySIi/Mq9m+dcy6CUWhoN/GuIx+ujPD+LuzevX5bXc9c4abB2zZpPMGQ41tTBQV0Zq1Ra0P/L14jRQJBXWzo5MqP6ZCLcrgqMgWNN81/1n71yi+6h8TWV5lFKrRwN/GvE1J6xyxd8qzfks2n9ugXTPZ5GH5l24YkYdYGUUqlHA/8a4fH6ycvKYP+u5cuxiwjuGievtXYxPB67Rr8xBo/Xz8O7SsnXlbFKpYXl2HP3koh8KCLviUhDjMdFRP5CRNpE5AMRuS/Rc6aaUChca+eJyjKyMhKrZz+T21XB2ESIk+e7Yj7e2jHI5e5hXRmrVBpZriv+g8aYe4wxtTEeewrYY/08C3xzmc6ZMt692kvX4NiKzFe/f3sR63My51zFuxaKsimlVtdqpHqeBn5gws4A60Vk9vzDNFbv9ZNhEw5Uzl2Ubaky7DYOVZVzvLmDieDsGv2eRh93b1mPs0BXxiqVLpYj8BvAIyLviMizMR7fBFyddv+a1aYsHq+Ph3aWULhuZXLsbpeT3uEAb13qiWr39Y3y/rU+XRmrVJpZjsD/iDHmPsIpnc+IyOMzHo81N3FWvWAReVZEGkSkobOzcxm6dXto6xikvXOIj6zgVMrH95aRlWGbNbun3prmuZLnVkqtPQkHfmPMDet3B/BT4IEZh1wDpm+Kuhm4EeN1njPG1BpjasvK0mdaYSQYH1nBq+4cRwaP7SnF0xjetCXC0+hjR2kuu+KoC6SUSh0JBX4RyRWR/MhtwA2cm3HYC8BvWbN7HgL6jDE3EzlvKvF4fdy1uZANhetW9Dx1LifXe0doujkAQP9ogDPt3bjXUFE2pdTqSPSK3wmcEpH3gbeAnxtjXhKR3xOR37OOeRFoB9qAvwL+twTPmTI6+kd590rvqtSaP1ztRITJ2T0nWjoJBI2u1lUqDSVU/coY0w7cHaP9W9NuG+AziZwnVR1t6gBYVDXOpSrNy2Lf1iI8jX4+f2QvnkYfpXkO7tlStOLnVkqtLbpyN4k8Xh9bi3PY61ydHLu7xon3Zj8Xu4Y40dLJkWon9mWqC6SUun1o4E+SwbEJ3mhb3Rx7nSv8l8WX/mcjg2MTmuZRKk1p4E+SV1s6GQ+GVnXF7I7SXPaU5/FKSyc5DjsP7ypdtXMrpdYODfzLpL1zMGqqZMSV7uHYK2a9PopzHezbtro59shV/hN7y8jOXN66QEqp24MG/mXQcKmHQ3/yKseswdoIX98oh//0BN99/VJUeyAY4nhzB4eqysmwr+5H8JS1W9dH79SqGUqlKw38y+DnH4aXJbz4YfTyhHqvj0DQTD4e8WZ7DwOjE0kplXDHpkJe+XcH+NhdGviVSlca+BNkjMHTGF59e6y5g8C0tI7HWpX73tVe/P2j09p9ZGfaeGxPclYo7yjN1UVbSqUxDfwJaro5wPXeEQ5WltE3EuDti+FCaH0jAU5f6OZgZTi4R0ozGBOuvf/YnjLWOTTHrpRafRr4E+Tx+hCBLz19B1kZtsmr/BMtHUyEDJ85uJvtJTmTgf/c9X5u9o1qRUylVNJo4E+Qp9HPvq1FbCnO4bE9pdR7/ZNX9aV5Wdy7tYg6l5M3LnQxMBqg3uvDJuESCkoplQwa+BNw7dYw3pv9k1MkI4XQ3rvaa62MLcduE9w1FQSChhMtnXi8fmq3F1Oc60hy75VS6UoDfwKmti0Mr4iNFEL74595o1bG3re1iJJcB999/SLNvgFN8yilkkoDfwLqvX72lOexozQXCBdCq91WxNkrvVErY+024XB1OWev9ALhDdCVUipZNPAvUe/wOG9e7JlVciFyf+bK2MhfBVUV+WwtyVm9jiql1Awa+JfoeHMHwZCZFfifumMDjgwbT98Tva3wY3tKKcl1zGpXSqnVllA9/nRW7/XjLMji7s3ro9q3FOfw7n+sIzcr+j9tdqadU39wiKwM/a5VSiXXkqOQiGwRkVdEpElEGkXkczGOOSAifSLynvXzxcS6uzaMBoK8ej5cz94Wo579zKAfsc5hj3m8UkqtpkSu+CeAf2uMOWvtu/uOiNQbY7wzjnvNGPOxBM6z5rze1sXweHBVds5SSqnltuQrfmPMTWPMWev2ANAEpEUCu97rJz8rg/07S5LdFaWUWrRlSTiLyHbgXuDNGA/vF5H3ReSfRaRmntd4VkQaRKShs7NzObq1IoIhw9EmP09UluHQfL1S6jaUcOQSkTzgH4DPG2P6Zzx8FthmjLkb+EvgH+d6HWPMc8aYWmNMbVlZcqpWxuO9q7foGhzXNI9S6raVUOAXkUzCQf+vjTE/mfm4MabfGDNo3X4RyBSR23q/P0+jn0y7cKBy7X45KaXUfBKZ1SPA80CTMeZP5zimwjoOEXnAOl/3Us+ZbMYYPF4/D+0soSA7M9ndUUqpJUlkVs8jwG8CH4rIe1bb/wlsBTDGfAv4BPC/isgEMAJ80sTamPY2caFzkItdQ/zOozuS3RWllFqyJQd+Y8wpYN5J6caYrwNfX+o51pqXrZ226rSkslLqNqbTUhah3uvn7s2FVBRmJ7srSim1ZBr44+TvH+W9q706m0cpddvTwB+nqdr7muZRSt3eNPDHqd7rZ3tJDnvK85LdFaWUSogG/jgMjAZ440IX7poKrNmpSil129LAH4cTLZ0EgrNr7yul1O1IA38c6r1+SnId3Le1KNldUUqphGngX8D4RIhXmjs4Uu3ErrX0lVIpIO0C/ystHRy1ZuhM98G1Xn7ccHVW+5n2bgbGJjTNo5RKGWm19aIxhv/w03OMTYR4q6o8ajesr77UwhsXuqirdlKU65hsr/f6WZdp59E9t3VtOaWUmpRWV/yNN/q53jtC1+AY717tnWzvGw5wpr2bkIFjzR2T7aGQod7r54m9ZWRn2pPRZaWUWnZpFfg9Xj82gQybTC7IgnD6ZyJkcGTYqPf6Jts/vN6Hr39U0zxKqZSSVoG/3uundlsxD+0swTMtwNd7/ZTlZ/Fr+zbz6vlORsaDk+12m3CoqjxZXVZKqWWXNoH/as8wTTf7cdc4cdc4ae8coq1jkNFAkBMt4Vk7T95RwWggxKm2LgA8Xh/3by+KyvkrpdTtLm0Cv2darZ0jVlnleq+f0xe6GRoP4q5x8uCOEvKzMqj3+rjUNcR5/yBulxZlU0qllrSZ1VPv9VHpzGdbSS4Ad24qxOP1caVnmFyHnYd3leDIsHGwqpxjTR3sLAvX5NH8vlIq1SS65+6TItIiIm0i8oUYj2eJyN9aj78pItsTOd9S3Roa562LPbhrpoK42+Xkvau9vPjhTQ5UlpOVEZ61465x0j00zn9/9QLVGwrYUpyTjC4rpdSKSWTPXTvwDeApwAV8SkRcMw77NHDLGLMb+BrwlaWeLxHHmzsIGaLSNu6aCoyBvpFA1BfCE3vLcNht3BoO4NarfaVUCkrkiv8BoM0Y026MGQf+Bnh6xjFPA9+3bv89cFhWqLzlyHiQz/z1Wf4uxupbj9fHhsJs7thUMNm215nH1uIcMmzCgcqpWTv52Zns31UCaJpHKZWaEsnxbwKmR9lrwINzHWOMmRCRPqAE6Jr5YiLyLPAswNatWxfdmexMG003++kfDfBrtVsm20cDQU6e7+IT+zZHlVQWET53eA9Xbw1TuC4z6rX+9eM72bh+HTUbC1BKqVSTSOCPdeVulnBMuNGY54DnAGpra2MeM29nRKhzOfnO6xfpHw1QkB0O5qdauxgJBKPSORG/um9zzNd6eHcpD+/WEg1KqdSUSKrnGrBl2v3NwI25jhGRDKAQ6EngnPNy1zgJBA0nWjon2zxeH/nZGTy4o2SlTquUUreVRAL/28AeEdkhIg7gk8ALM455AXjGuv0J4LgxZtFX8/G6Z0sRpXlZeBrDq3KDIcOxpg4OVZXjyEibJQtKKTWvJad6rJz9Z4GXATvwHWNMo4h8CWgwxrwAPA/8UETaCF/pf3I5Oj0Xu004Ul3Ozz64ydhEkA+u9dE9NK6DtEopNU1CC7iMMS8CL85o++K026PAryVyjsVy1zj5m7evcqa9h1OtnTjsNp7YW7aaXVBKqTUt5VbuPryrlByHHU+jj1NtXTy8u4T87MyFn6iUUmki5RLf2Zl2nthbxk/fvc7l7mFN8yil1AwpF/ghnO4Ztkor11Vr4FdKqelSLtUDcLCyHLtNuHNTIeUF2cnujlJKrSkpGfjX5zj44sdc7C7PS3ZXlFJqzUnJwA/wzMPbk90FpZRak1Iyx6+UUmpuGviVUirNaOBXSqk0o4FfKaXSjAZ+pZRKMxr4lVIqzWjgV0qpNKOBXyml0oys4L4oSyYincDlJT69lBh7+qa4dHzPkJ7vOx3fM6Tn+17se95mjImrBv2aDPyJEJEGY0xtsvuxmtLxPUN6vu90fM+Qnu97Jd+zpnqUUirNaOBXSqk0k4qB/7lkdyAJ0vE9Q3q+73R8z5Ce73vF3nPK5fiVUkrNLxWv+JVSSs1DA79SSqWZlAn8IvKkiLSISJuIfCHZ/VkpIrJFRF4RkSYRaRSRz1ntxSJSLyKt1u+iZPd1uYmIXUTeFZGfWfd3iMib1nv+WxFxJLuPy01E1ovI34tIs/WZ70/1z1pEft/6t31ORH4kItmp+FmLyHdEpENEzk1ri/nZSthfWPHtAxG5L5Fzp0TgFxE78A3gKcAFfEpEXMnt1YqZAP6tMaYaeAj4jPVevwAcM8bsAY5Z91PN54Cmafe/AnzNes+3gE8npVcr68+Bl4wxVcDdhN9/yn7WIrIJ+DdArTHmDsAOfJLU/Ky/Bzw5o22uz/YpYI/18yzwzUROnBKBH3gAaDPGtBtjxoG/AZ5Ocp9WhDHmpjHmrHV7gHAg2ET4/X7fOuz7wC8np4crQ0Q2A78AfNu6L8Ah4O+tQ1LxPRcAjwPPAxhjxo0xvaT4Z014S9h1IpIB5AA3ScHP2hhzEuiZ0TzXZ/s08AMTdgZYLyIblnruVAn8m4Cr0+5fs9pSmohsB+4F3gScxpibEP5yAMqT17MV8WfAvwdC1v0SoNcYM2HdT8XPfCfQCXzXSnF9W0RySeHP2hhzHfhvwBXCAb8PeIfU/6wj5vpslzXGpUrglxhtKT1PVUTygH8APm+M6U92f1aSiHwM6DDGvDO9OcahqfaZZwD3Ad80xtwLDJFCaZ1YrJz208AOYCOQSzjNMVOqfdYLWdZ/76kS+K8BW6bd3wzcSFJfVpyIZBIO+n9tjPmJ1eyP/Oln/e5IVv9WwCPAL4nIJcJpvEOE/wJYb6UDIDU/82vANWPMm9b9vyf8RZDKn/UR4KIxptMYEwB+AjxM6n/WEXN9tssa41Il8L8N7LFG/h2EB4NeSHKfVoSV234eaDLG/Om0h14AnrFuPwP802r3baUYY/7QGLPZGLOd8Gd73BjzG8ArwCesw1LqPQMYY3zAVRGptJoOA15S+LMmnOJ5SERyrH/rkfec0p/1NHN9ti8Av2XN7nkI6IukhJbEGJMSP8BHgfPABeCPkt2fFXyfjxL+E+8D4D3r56OEc97HgFbrd3Gy+7pC7/8A8DPr9k7gLaAN+DsgK9n9W4H3ew/QYH3e/wgUpfpnDfxnoBk4B/wQyErFzxr4EeFxjADhK/pPz/XZEk71fMOKbx8SnvW05HNryQallEozqZLqUUopFScN/EoplWY08CulVJrRwK+UUmlGA79SSqUZDfxKKZVmNPArpVSa+f8B8wpXpnTBVIgAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(walk[:100])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 214,
   "metadata": {},
   "outputs": [],
   "source": [
    "nsteps = 1000\n",
    "draws = np.random.randint(0,2,size=nsteps)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 215,
   "metadata": {},
   "outputs": [],
   "source": [
    "steps = np.where(draws > 0,1,-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 216,
   "metadata": {},
   "outputs": [],
   "source": [
    "walk = steps.cumsum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 217,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-9"
      ]
     },
     "execution_count": 217,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walk.min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 218,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "60"
      ]
     },
     "execution_count": 218,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walk.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 219,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "297"
      ]
     },
     "execution_count": 219,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(np.abs(walk) >=10).argmax()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 220,
   "metadata": {},
   "outputs": [],
   "source": [
    "#yicimoniduogesuijimanbu"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 221,
   "metadata": {},
   "outputs": [],
   "source": [
    "nwalks = 5000\n",
    "nsteps = 1000\n",
    "draws = np.random.randint(0,2,size=(nwalks,nsteps))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 222,
   "metadata": {},
   "outputs": [],
   "source": [
    "steps = np.where(draws > 0 ,1, -1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 223,
   "metadata": {},
   "outputs": [],
   "source": [
    "walks = steps.cumsum(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 224,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  1,   2,   3, ...,  46,  47,  46],\n",
       "       [  1,   0,   1, ...,  40,  41,  42],\n",
       "       [  1,   2,   3, ..., -26, -27, -28],\n",
       "       ...,\n",
       "       [  1,   0,   1, ...,  64,  65,  66],\n",
       "       [  1,   2,   1, ...,   2,   1,   0],\n",
       "       [ -1,  -2,  -3, ...,  32,  33,  34]], dtype=int32)"
      ]
     },
     "execution_count": 224,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 225,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "122"
      ]
     },
     "execution_count": 225,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walks.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 226,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-128"
      ]
     },
     "execution_count": 226,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walks.min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 227,
   "metadata": {},
   "outputs": [],
   "source": [
    "hist30 = (np.abs(walks) >= 30).any(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 230,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True,  True,  True, ...,  True, False,  True])"
      ]
     },
     "execution_count": 230,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hist30"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 231,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3368"
      ]
     },
     "execution_count": 231,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hist30.sum(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 232,
   "metadata": {},
   "outputs": [],
   "source": [
    "crossing_times = (np.abs(walks[hist30]) >= 30).argmax(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 233,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "509.99762470308787"
      ]
     },
     "execution_count": 233,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "crossing_times.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 235,
   "metadata": {},
   "outputs": [],
   "source": [
    "steps = np.random.normal(loc=0,scale=0.25,size=(nwalks,nsteps))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
